# -*- coding: utf-8 -*-
"""
Created on Sun May  5 17:02:20 2019

@author: Administrator
"""

import numpy as np
# 数据存取与函数
# 便捷文件存取
# np.save/savez(fname, array)
# np.load(file_name)
# file_name: 文件名，以.npy为扩展名
# array:变量
data = np.arange(100).reshape(5,10,2)
np.save("data.npy", data)

loaded_data = np.load("data.npy")


# csv格式
# 格式：xx, xx, xx, xx

# np.savetxt(frame, array, fmt, delimiter)
# frame:文件、字符串，可以是.gz/.bz2的压缩文件
# array: 待存数组
# fmt:写入格式，例如： %d %.2f %.18e
# delimiter: 分割字符串，默认空格

data = np.arange(100).reshape(5,20)

np.savetxt('a.csv', data, fmt='%d', delimiter=',')

# np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
# frame:文件、字符串
# dtype: 数据类型
# unpack: 如果为True，读入属性将分别写入不同变量

loaded_data = np.loadtxt('a.csv', dtype=np.int, delimiter=',')
print(loaded_data)

# np.savetxt()/loadtxt()局限：
# np.savetxt()/loadtxt()只能保存一维或者二维的ndarray


# 任意维
# 写入文件
# a.tofile(frame, sep='', format)
# sep:分割字符串，空串为写入文件为二进制
n_dimen = np.arange(24).reshape(2,3,4)
n_dimen.tofile("b.dat", sep=",", format='%d')

# 读取文件
# np.fromfile(frame, dtype=float, count=-1, sep='')
# sep:同上
# count:读入元素个数，-1表示整个文件
loaded_ndimen = np.fromfile("b.dat", dtype=int, sep=',').reshape(2,3,4)

# 注意：
# 该方法需要读取时知道存入文件时数组的维度和元素的类型


# numpy frombuffer
# numpy.frombuffer(buffer, dtype=x, count=-1, offset=0)
# buffer: 任何暴露缓冲区接口的对象
# count: 需要读取的item的数量，默认-1 表示所有数据
# offset: 从中开始读取的位置，默认0

#name = 'Gavin Ge'
#print(np.asarray(name))
#str_array = np.frombuffer(name)
#print(str_array)


# 小结
# 数据的保存与加载
# np.save()/np.load()：保存加载任意维度原始数据
# np.savetxt()/np.loadtxt()：保存加载格式化数据，但是数据只能是一维、二维
# np.tofile()/np.fromfile()：保存加载任意维格式化数据